/**
*	file Game.h
*	\brief Module qui gere le hero
*	\author Ostapenco Vladimir, Gehin Maxime
*	\version 1.0
*	\date 16/12/2013
*	Ce module est le coeur du jeu qui vas utiliser tous les autres modules.
*/


#ifndef Game_h
#define Game_h

#include "Terrain.h"
#include "Hero.h"
#include "Monster.h"
#include "Teleport.h"

/**
* \struct Jeu
* \brief structure jeu qui contient un tableau de monstre, un terrain, un hero et un tableau de teleport*/

typedef struct {

	Monster * tabmonst;
	int nb_monstre;
	Terrain ter;
	Hero her;
	int gamestat; 
	float regen_cooldown;
	Teleport * tabTeleport;
	int nb_teleport;

} Jeu;
/**fonction qui initialise le jeu avec une certaine methode : init en newgame ou init en continue*/
void jeuInit(Jeu *,const char);

/**fonction qui libère le jeu*/
void jeuFree(Jeu *);

/**fonction qui renvoie un pointeur sur terrain*/
Terrain * jeuGetTerrain(Jeu *);

/**fonction qui renvoie un pointeur sur hero*/
Hero * jeuGetHero(Jeu *);

/**fonction qui vas effectuer des actions selon la touche passée en parrametre*/
void jeuActionClavier(Jeu *, const char);

/**fonction au coeur du jeu qui appele toutes les autres fonction et qui depent du temps*/
void jeuEvolue(Jeu *, float);

/** fonction qui renvoie le statut du jeu*/
int statGame(const Jeu *);

/**fonction qui modifie le statut du jeu*/
void setGame(Jeu *,int);

/**fonction qui gere la regen de hp/mp du hero lorsqu'il est hors combat*/
void regenHeroGame(Jeu *,float);

/**
*	fonction qui renvoie la distance entre un monstre et le hero
*	\param x In-OUT la distance en x
*	\param y In-OUT la distance en y
*/
int getDistance(Monster *,Hero *, int *,int *);

/**fonction qui gere l'attaque automatique du monstre*/
void monstAttaqueAutomatique(Jeu *,float);

/**fonction qui gere l'attaque automatique du hero*/
void herAttaqueAutomatique(Jeu *,float);

/**fonction qui gere tout le system de spell*/
void completeCastSpell(Jeu *,int);

/**fonction qui verrifie si un spell peut etre lancé*/
int checkSpell(Jeu *,const Spell *);

/**fonction qui lance le spell et qui inflige les degats*/
void castSpell(Jeu *,Spell *);

/**fonction qui gere la mort des monstre*/
void monsterDie(Jeu *,Monster *);

/**fonction qui dirige le monstre en dirrection du hero*/
void monsterDirectionHero(Jeu *,Monster *);

/**test de regression du module Jeu*/
void jeuTestRegression();


#endif
